package com.atu.atugra.service;

import com.alibaba.fastjson.JSONObject;
import com.atu.atugra.tools.FileUtil;
        import com.atu.atugra.tools.IpUtil;
        import com.qiniu.common.QiniuException;
        import com.qiniu.common.Zone;
        import com.qiniu.http.Response;
        import com.qiniu.storage.Configuration;
        import com.qiniu.storage.UploadManager;
        import com.qiniu.util.Auth;
        import org.springframework.stereotype.Service;
        import org.springframework.web.multipart.MultipartFile;

        import javax.servlet.http.HttpServletRequest;
        import java.io.IOException;
        import java.time.LocalDate;
        import java.util.UUID;

@Service
public class QiniuService {

    // 设置好账号的ACCESS_KEY和SECRET_KEY
    String ACCESS_KEY = "NbBbNUUv6tqSqTtrWXmzZFzO5duzvWNtKrvpRN3j";
    String SECRET_KEY = "QW-7U8r1-6zXDWiUtgG6pASG6tRjCxQzxjU0G0PY";

    // 要上传的空间（创建空间的名称）
    String bucketname = "t2t";

    // 密钥配置
    Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);

    // 构造一个带指定Zone对象的配置类,不同的七牛云存储区域调用不同的zone
    Configuration cfg = new Configuration(Zone.zone2());
    // ...其他参数参考类注释
    UploadManager uploadManager = new UploadManager(cfg);

    // 使用的是测试域名
    private static String QINIU_IMAGE_DOMAIN = "qiniucdnoss.ka0.top/";

    // 简单上传，使用默认策略，只需要设置上传的空间名就可以了
    public String getUpToken() {
        return auth.uploadToken(bucketname);
    }

    public String saveImage(MultipartFile file, HttpServletRequest request) throws IOException {
        try {
            int dotPos = file.getOriginalFilename().lastIndexOf(".");
            if (dotPos < 0) {
                return null;
            }
            String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
            // 判断是否是合法的文件后缀
            if (!FileUtil.isFileAllowed(fileExt)) {
                return null;
            }
            String ipAddr = IpUtil.getIpAddr(request);
            // 获取当前日期，并将其作为文件夹
            String dateFolder = LocalDate.now().toString(); // 格式：yyyy-MM-dd，例如 2025-02-13

            // 使用当前时间戳（毫秒级）作为文件名
            String fileName = System.currentTimeMillis() + ipAddr + "." + fileExt;

            // 构造上传路径：目录/文件名
            String uploadPath = dateFolder + "/" + fileName ;

            // 调用put方法上传，使用路径+文件名
            Response res = uploadManager.put(file.getBytes(), uploadPath, getUpToken());

            // 打印返回的信息
            if (res.isOK() && res.isJson()) {
                // 返回存储照片的地址
                return "http://" + QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key");
            } else {
                return null;
            }
        } catch (QiniuException e) {
            // 请求失败时打印的异常信息
            e.printStackTrace();
            return null;
        }
    }
}
